C# .NET winform地图开发GMap离线地图在线地图&自建地图服务器 |
您所在的位置:网站首页 › 百度地图 离线开发怎么用 › C# .NET winform地图开发GMap离线地图在线地图&自建地图服务器 |
目录
添加GMap引用下载GMap demo尝试一个测试程序下载离线地图使用离线模式读取地图加载高德地图获取WMTS坐标系转化GMap常用地图操作自建地图服务器
添加GMap引用
包含GMap源码以及地图下载器(用于生成GMDB格式离线地图文件) 下载地址:https://archive.codeplex.com/?p=greatmaps PS:部分网络下载速度较慢,稍后提供下载链接。 新建用户控件继承GMapControl 适合内网环境,程序拷贝到另外的设备也可以直接使用,方便部署;后面还会给出自建地图服务器的方法,以便更高要求的开发需要。 打开官方的demo,运行Demo.WinfowsForms.exe下载地图;低配电脑打开较慢,请耐心等待。 按住alt,鼠标左键框选需要下载的地图 修改我们的代码 打开GMap源码,可以看到已经有很多MapProvider;可是没有高德,百度等国内地图的Provider;需要我们自己实现MapProvider。 这不就是我们要找的瓦片地图吗? 这里提供高德的WMTS接口,修改style可以调用不同的地图样式。(在网路上找了很多,这个版本的WMTS貌似是最新的,不过好像没有只显示路名的简图) 完成AMapProvider的编写后,打开GMapProviders类,新增一个高德地图的实例 有了WMTS接口就可以加载任意的地图 注意地图使用的坐标系,不同坐标系经纬度会有偏移: 名称解释WGS84地心坐标系,国际通用坐标系GCJ02国测局坐标(火星坐标系),WGS84加密后的坐标系;GoogleChina地图、高德地图等国内地图使用BD09百度坐标系,GCJ02再次加密后的坐标系网路上可以搜索到坐标原理以及不同坐标转换的工具类,在此不再赘述。 GMap常用地图操作GMap地图控件结构: 底图 ↓ 图层1→markers、routes… ↓ 图层2→markers、routes… //图层 GMapOverlay bgLayer = new GMapOverlay("bgLayer"); mapControl1.Overlays.Add(bgLayer); mapControl1.Overlays.Remove(bgLayer); //marker Bitmap markerGreen = Image.FromFile("path") as Bitmap; PointLatLng point = new PointLatLng(32.261551, 118.339794); GMapMarker marker = new GMarkerGoogle(point, markerGreen); //tooltip MarkerTooltipMode mode = MarkerTooltipMode.Always;//标注一直显示 Brush tooltipBackColor = new SolidBrush(Color.Transparent); marker.ToolTip = new GMapToolTip(marker); marker.ToolTipMode = mode; marker.ToolTipText = "xx路与xx路"; //tooltip样式 marker.ToolTip.Font = new Font("微软雅黑", 11); marker.ToolTip.Fill = tooltipBackColor; marker.ToolTip.Foreground = Brushes.Gray; marker.ToolTip.Stroke.Brush = tooltipBackColor; marker.ToolTip.Offset = new System.Drawing.Point(marker.Offset.X - (int)((float)marker.ToolTipText.Length / 2) * 15, marker.Offset.Y + 28); //marker加到图层 bgLayer.Markers.Add(marker); //marker点击事件 mapControl1.OnMarkerClick += new MarkerClick(Marker_Click_Event); //Route线路 List points = new List(); GMapRoute r = new GMapRoute(points, null); bgLayer.Routes.Add(r);自定义Marker,实现图标实时切换,图标闪烁等功能 public class GMapMarkerImage : GMapMarker { private Image image; public Image Image { get { return image; } set { image = value; if (image != null) { this.Size = new Size(image.Width, image.Height); } } } public Pen Pen { get; set; } public Pen OutPen { get; set; } public GMapMarkerImage(PointLatLng point, Image image) : base(point) { Size = new Size(image.Width, image.Height); Offset = new Point(-Size.Width / 2, -Size.Height / 2); this.image = image; Pen = null; OutPen = null; } public override void OnRender(Graphics g) { if (image == null) { return; } Rectangle rect = new Rectangle(LocalPosition.X, LocalPosition.Y, Size.Width, Size.Height); Rectangle rectBlink = new Rectangle(LocalPosition.X-3, LocalPosition.Y -3, Size.Width+5, Size.Height+5); g.DrawImage(image, rect); if (Pen != null) { g.DrawRectangle(Pen, rect); } if (OutPen != null) { g.DrawEllipse(OutPen, rectBlink); } } public void UpdateImage(Image image) { this.image = image; } public override void Dispose() { if (Pen != null) { Pen.Dispose(); Pen = null; } if (OutPen != null) { OutPen.Dispose(); OutPen = null; } base.Dispose(); } } //切换图片 marker.UpdateImage(bitmapGreen); //闪烁 用定时器刷新 if (marker.OutPen == null) { marker.OutPen = new Pen(Brushes.DeepSkyBlue, 5); } else { marker.OutPen.Dispose(); marker.OutPen = null; }可以实现的效果 通过自建地图服务器,可以实现自定义地图边界,手动绘制新增道路,随意调整地图样式,去除不必要的标注等功能。 GeoServer 是 OpenGIS Web 服务器规范的 J2EE 实现,利用 GeoServer 可以方便的发布地图数据,允许用户对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间地理信息。GeoServer是社区开源项目,可以直接通过社区网站下载。 WEB开发可以通过OpenLayers访问地图服务器。OpenLayers 是一个专为Web GIS 客户端开发提供的JavaScript 类库包,用于实现标准格式发布的地图数据访问。可以在 Web 上创建交互式地图,显示从任何来源加载的地图图块、矢量数据和标记。 安装GeoServer(需要JDK) 地图预览,比第三方地图服务器简洁了很多,多余的区域不显示,没有杂乱的标注和图标,可以充分个性化。 WMS接口 程序展示 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |